home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / anims.demo < prev    next >
Text File  |  1997-11-28  |  16KB  |  1,062 lines

  1.  
  2.  
  3. brightanim:
  4.  
  5.  move.l branimpt,a0
  6.  move.w (a0),d0
  7. ; move.w d0,ZoneDat24+6
  8.  sub.w #10,d0
  9.  asr.w #1,d0
  10.  add.w #10,d0
  11. ; move.w d0,ZoneDat23+6
  12. ; move.w d0,ZoneDat23+6
  13.  
  14.  sub.w #1,branimcount
  15.  bgt.s nonextbr
  16.  adda.w #4,a0
  17.  cmp.l #endbranim,a0
  18.  blt.s notrestartbr
  19.  move.l #branim,a0
  20. notrestartbr
  21.  move.l a0,branimpt
  22.  move.w 2(a0),branimcount
  23. nonextbr:
  24.  
  25.  rts
  26.  
  27. branimpt: dc.l branim
  28. branimcount: dc.w 0
  29.  
  30. branim:
  31.  dc.w 10,1
  32.  dc.w -15,1
  33.  dc.w 10,3
  34.  dc.w -15,1
  35.  dc.w 10,4
  36.  dc.w -15,1
  37.  dc.w 10,1
  38.  dc.w -15,2
  39.  dc.w 10,2
  40.  dc.w -8,1
  41.  dc.w 10,1
  42.  dc.w -5,1
  43.  dc.w 10,2
  44.  dc.w -15,1
  45.  dc.w 10,2
  46.  
  47. endbranim
  48.  
  49. objvels: ds.l 8
  50.  
  51. Robotanimpos:
  52.  dc.w 0
  53. Robotarmpos
  54.  dc.w 0
  55. clump: dc.w 0
  56.  
  57. RobotWalk:
  58.  move.l #RobotPts+2,a0
  59.  move.l #Robotanim,a1
  60.  move.w Robotanimpos(pc),d0
  61.  
  62.  clr.b clump
  63.  adda.w d0,a1
  64.  
  65.  move.w #(38*3)-1,d0
  66. putinpts:
  67.  move.w (a1)+,(a0)+
  68.  dbra d0,putinpts
  69.  
  70.  
  71.  move.l #RightArm,a0
  72.  move.l #Armanim,a1
  73.  move.w Robotarmpos(pc),d0
  74.  adda.w d0,a1
  75.  move.w #(14*3)-1,d0
  76. putinpts2:
  77.  move.w (a1)+,(a0)+
  78.  dbra d0,putinpts2
  79.  
  80.  move.l #Robot_MainBody,a0
  81.  move.l #BodyPlace+2,a1
  82.  move.w (a0)+,d0
  83.  move.w RobotPts+4+14*6,d1
  84.  add.w RobotPts+4+22*6,d1
  85.  asr.w #1,d1
  86.  
  87. putinheights:
  88.  move.w (a0)+,d2
  89.  add.w d1,d2
  90.  move.w d2,(a1)
  91.  addq #6,a1
  92.  dbra d0,putinheights
  93.  
  94.  move.w visxpos,d0
  95.  add.w visxdir,d0
  96.  cmp.w #24,d0
  97.  blt.s okvisr
  98.  move.w #-4,visxdir
  99. okvisr
  100.  cmp.w #-24,d0
  101.  bgt.s okvisl
  102.  move.w #4,visxdir
  103. okvisl:
  104.  move.w d0,visxpos
  105.  
  106.  move.l #VISOR,a0
  107.  add.w #64,d0
  108.  move.b d0,6(a0)
  109.  move.b d0,18(a0)
  110.  move.b d0,22(a0)
  111.  add.b #63,d0
  112.  move.b d0,10(a0)
  113.  move.b d0,14(a0)
  114.  
  115.  rts
  116.  
  117. visxpos: dc.w 0
  118. visxdir: dc.w 4
  119.  
  120. FramesToDraw: dc.w 0
  121. TempFrames: dc.w 0
  122.  
  123. objmoveanim:
  124.  
  125.  move.l PLR1_Roompt,a0
  126.  move.w (a0),PLR1_Zone
  127.  move.l PLR2_Roompt,a0
  128.  move.w (a0),PLR2_Zone
  129.  
  130.  bsr DoorRoutine
  131.  bsr LiftRoutine
  132.  bsr ObjectHandler
  133.  bsr PlayerShot
  134.  bsr RobotWalk
  135.  
  136.  subq.w #1,animtimer
  137.  bgt.s notzero
  138.  move.w #2,animtimer
  139.  move.l otherrip,d0
  140.  move.l RipTear,otherrip
  141.  move.l d0,RipTear
  142. notzero:
  143.  
  144.  rts
  145.  
  146. ******************************
  147.  
  148. tstdir: dc.w 0
  149. liftheighttab: ds.w 20
  150. doorheighttab: ds.w 20
  151.  
  152. LiftRoutine:
  153.  
  154.  move.l #LiftData,a0
  155.  move.l #liftheighttab,a6 
  156. doalift:
  157.  
  158.  move.w (a0)+,d0    ; bottom of lift movement
  159.  cmp.w #999,d0
  160.  bne notallliftsdone
  161.  rts
  162. notallliftsdone:
  163.  move.w (a0)+,d1    ; top of lift movement.
  164.  
  165.  move.w (a6)+,d3
  166.  move.w 2(a0),d2
  167.  move.w d3,(a0)+
  168.  move.l a0,a5
  169.  move.w d2,(a0)+
  170.  
  171.  move.l (a0)+,a1
  172.  asr.w #2,d3
  173.  move.w d3,d0
  174.  asl.w #2,d0
  175.  move.w d0,2(a1)
  176.  move.w d3,d0
  177.  muls #256,d3
  178.  move.l (a0)+,a1
  179.  move.w -2(a1),d5
  180.  move.l PLR1_Roompt,a3
  181.  move.l d3,(a1)
  182.  and.w #63,d0
  183.  neg.w d0
  184.  add.w #64,d0
  185.  
  186.  cmp.w (a3),d5
  187.  bne.s .notstoodonlift
  188.  
  189.  move.b (a0)+,d1    ; events
  190.  move.b (a0)+,d2    ; conditions
  191.  and.b Conditions,d2
  192.  cmp.b -1(a0),d2
  193.  bra.s .dothesimplething 
  194.  
  195.  move.w d7,(a5)
  196.  move.w #0,Noisex
  197.  move.w #0,Noisez
  198.  move.w #50,Noisevol
  199.  move.w #5,Samplenum
  200.  move.b #1,chanpick
  201.  st notifplaying
  202.  movem.l a0/a3/d0/d1/d2/d3/d6/d7,-(a7)
  203.  jsr MakeSomeNoise
  204.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6/d7
  205.  
  206.  bra.s .dothesimplething
  207.  
  208. .notstoodonlift:
  209.  
  210.  move.b (a0)+,d1    ; events
  211.  move.b (a0)+,d2    ; conditions
  212.  and.b Conditions,d2
  213.  
  214.  cmp.b -1(a0),d2
  215.  beq.s .satisfied 
  216.  
  217. .dothesimplething:
  218.  move.l #FloorLines,a3
  219. .simplecheck:
  220.  move.w (a0)+,d5
  221.  blt nomoreliftwalls
  222.  asl.w #5,d5
  223.  lea (a3,d5.w),a4
  224.  move.w #0,30(a4)
  225.  move.l (a0)+,a1
  226.  move.l (a0)+,a2
  227.  adda.w d0,a2
  228.  move.l a2,10(a1)
  229.  move.l d3,20(a1)
  230.  move.l d3,16(a4)
  231.  bra.s .simplecheck
  232.  bra nomoreliftwalls 
  233.  
  234. .satisfied:
  235.  
  236.  move.l #FloorLines,a3
  237.  
  238. liftwalls:
  239.  move.w (a0)+,d5
  240.  blt nomoreliftwalls
  241.  
  242.  asl.w #5,d5
  243.  lea (a3,d5.w),a4
  244.  move.b 30(a4),d4
  245.  move.w #0,30(a4)
  246.  and.b d1,d4
  247.  beq.s .nothinghit
  248.  move.w d7,(a5)
  249.  move.w #0,Noisex
  250.  move.w #0,Noisez
  251.  move.w #50,Noisevol
  252.  move.w #5,Samplenum
  253.  move.b #1,chanpick
  254.  st notifplaying
  255.  movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
  256.  jsr MakeSomeNoise
  257.  movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
  258. .nothinghit:
  259.  move.l (a0)+,a1
  260.  move.l (a0)+,a2
  261.  adda.w d0,a2
  262.  move.l a2,10(a1)
  263.  move.l d3,20(a1)
  264.  move.l d3,16(a4)
  265.  bra liftwalls
  266.  
  267. nomoreliftwalls 
  268.  bra doalift
  269.  
  270.  rts
  271.  
  272. animtimer: dc.w 2
  273.  
  274.  
  275. doordir: dc.w -1
  276. doorpos: dc.w -9
  277.  
  278. DoorRoutine:
  279.  
  280.  move.l #doorheighttab,a6
  281.  move.l #DoorData,a0
  282.  
  283. doadoor:
  284.  
  285.  move.w (a0)+,d0    ; bottom of door movement
  286.  cmp.w #999,d0
  287.  bne notalldoorsdone
  288.  rts
  289. notalldoorsdone:
  290.  move.w (a0)+,d1    ; top of door movement.
  291.  
  292.  move.w (a6)+,d3
  293.  
  294.  move.w d3,(a0)+
  295.  move.l a0,a5
  296.  move.w d2,(a0)+
  297.  
  298.  move.l (a0)+,a1
  299.  asr.w #2,d3
  300.  move.w d3,d0
  301.  asl.w #2,d0
  302.  move.w d0,2(a1)
  303.  move.w d3,d0
  304.  muls #256,d3
  305.  move.l (a0)+,a1
  306.  move.l d3,(a1)
  307.  and.w #63,d0
  308.  neg.w d0
  309.  add.w #64,d0
  310.  
  311.  move.b (a0)+,d1    ; events
  312.  move.b (a0)+,d2    ; conditions
  313.  and.b Conditions,d2
  314.  
  315. dothesimplething:
  316.  move.l #FloorLines,a3
  317. simplecheck:
  318.  move.w (a0)+,d5
  319.  blt nomoredoorwalls
  320.  asl.w #5,d5
  321.  lea (a3,d5.w),a4
  322.  move.w #0,30(a4)
  323.  move.l (a0)+,a1
  324.  move.l (a0)+,a2
  325.  adda.w d0,a2
  326.  move.l a2,10(a1)
  327.  move.l d3,24(a1)
  328.  move.l d3,20(a4)
  329.  bra.s simplecheck
  330.  bra nomoredoorwalls 
  331.  
  332. alreadygoingup:
  333.  move.w (a0)+,d1
  334.  bra dothesimplething
  335.  
  336. satisfied:
  337.  
  338.  move.l #FloorLines,a3
  339.  
  340. doorwalls:
  341.  move.w (a0)+,d5
  342.  blt.s nomoredoorwalls
  343.  asl.w #5,d5
  344.  lea (a3,d5.w),a4
  345.  move.b 30(a4),d4
  346.  move.w #0,30(a4)
  347.  and.b d1,d4
  348.  beq.s nothinghit
  349.  move.w #-16,(a5)
  350.  move.w #0,Noisex
  351.  move.w #0,Noisez
  352.  move.w #50,Noisevol
  353.  move.w #5,Samplenum
  354.  move.b #1,chanpick
  355.  st notifplaying
  356.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  357.  jsr MakeSomeNoise
  358.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  359. nothinghit:
  360.  move.l (a0)+,a1
  361.  move.l (a0)+,a2
  362.  adda.w d0,a2
  363.  move.l a2,10(a1)
  364.  move.l d3,24(a1)
  365.  move.l d3,20(a4)
  366.  bra.s doorwalls
  367.  
  368. nomoredoorwalls 
  369.  bra doadoor
  370.  
  371.  rts
  372.  
  373. tempGotBigGun: dc.w 0 
  374. tempGunDamage: dc.w 0
  375. tempGunNoise: dc.w 1
  376. tempxoff: dc.w 0
  377. tempzoff: dc.w 0
  378. tempRoompt: dc.l 0
  379.  
  380. PLR1_GotBigGun: dc.w 0
  381. PLR1_GunDamage: dc.w 0
  382. PLR1_GunNoise: dc.w 0
  383. PLR2_GotBigGun: dc.w 0
  384. PLR2_GunDamage: dc.w 0
  385. PLR2_GunNoise: dc.w 0
  386. bulyspd: dc.w 0 
  387. closedist: dc.w 0
  388.  
  389. ObsInLine:
  390.  ds.b 400 
  391.  
  392. rotcount:
  393.  dc.w 0
  394.  
  395. shotvels: ds.l 20
  396.  
  397. PLR1_clicked: dc.b 0
  398. PLR2_clicked: dc.b 0
  399. popping: ds.l 5*4
  400. targetydiff: dc.l 0
  401.  
  402. PlayerShot:
  403.  
  404.  tst.b PLR1_clicked
  405.  beq PLR1_nofire
  406.  
  407.  move.w PLR1_angpos,d0
  408.  move.l #SineTable,a0
  409.  lea (a0,d0.w),a0
  410.  move.w (a0),tempxdir
  411.  move.w 2048(a0),tempzdir
  412.  move.w PLR1_xoff,tempxoff
  413.  move.w PLR1_zoff,tempzoff
  414.  move.w PLR1_GunNoise,tempGunNoise
  415.  move.w PLR1_GotBigGun,tempGotBigGun
  416.  move.w PLR1_GunDamage,tempGunDamage
  417.  move.l PLR1_Roompt,tempRoompt
  418.  move.l #%10000001,d7
  419.  move.w #-1,d0
  420.  move.l #0,targetydiff
  421.  move.w #32767,d1
  422.  
  423.  move.l #ObsInLine,a1
  424.  move.l #ObjectData,a0
  425.  move.l #ObjRotated,a2
  426. findclosestinline
  427.  tst.w (a0)
  428.  blt.s outofline
  429.  tst.b (a1)+
  430.  beq.s notlinedup
  431.  tst.b 17(a0)
  432.  beq.s notlinedup
  433.  move.b 16(a0),d6
  434.  btst d6,d7
  435.  beq.s notlinedup
  436.  move.w (a0),d5
  437.  move.w 2(a2,d5.w*8),d6
  438.  cmp.w d6,d1
  439.  blt.s notlinedup
  440.  move.w d6,d1
  441.  
  442. ; We have a closer enemy lined up.
  443.  move.w 4(a0),d6
  444.  ext.l d6
  445.  asl.l #7,d6
  446.  sub.l PLR1_yoff,d6
  447.  move.l d6,targetydiff 
  448.  move.w d5,d0
  449.  
  450. notlinedup:
  451.  add.w #64,a0
  452.  bra findclosestinline
  453.  
  454. outofline:
  455.  
  456.  move.w #0,bulyspd
  457.  tst.w d0
  458.  blt.s nothingtoshoot
  459.  move.l targetydiff,d7
  460.  sub.l #playerheight,d7
  461.  add.l #22*256,d7
  462.  move.w d1,closedist
  463.  asr.w #4,d1
  464.  tst.w d1
  465.  bgt.s okdistthing
  466.  moveq #1,d1
  467. okdistthing
  468.  divs d1,d7
  469.  move.w d7,bulyspd
  470.  
  471. nothingtoshoot:
  472.  
  473.  bsr pressedfire
  474. PLR1_nofire:
  475.  
  476.  tst.b PLR2_clicked
  477.  beq.s PLR2_nofire
  478.  
  479.  move.w PLR2_angpos,d0
  480.  move.l #SineTable,a0
  481.  lea (a0,d0.w),a0
  482.  move.w (a0),tempxdir
  483.  move.w 2048(a0),tempzdir
  484.  move.w PLR2_xoff,tempxoff
  485.  move.w PLR2_zoff,tempzoff
  486.  move.w PLR2_GunNoise,tempGunNoise
  487.  move.w PLR2_GotBigGun,tempGotBigGun
  488.  move.w PLR2_GunDamage,tempGunDamage
  489.  move.l PLR2_Roompt,tempRoompt
  490.  bsr pressedfire
  491. PLR2_nofire:
  492.  
  493.  rts
  494.  
  495. tempangpos: dc.w 0
  496. tempxdir: dc.w 0
  497. tempzdir: dc.w 0
  498.  
  499. pressedfire:
  500.  
  501.  move.w #0,d7
  502.  move.w #256,d6
  503.  move.w #256,d5
  504.  
  505. firefive:
  506.  
  507.  move.l #PlayerShotData,a0
  508.  move.w #19,d1
  509. .findonefree
  510.  move.w 12(a0),d0
  511.  blt.s .foundonefree
  512.  adda.w #64,a0
  513.  dbra d1,.findonefree
  514.  
  515.  rts
  516.  
  517. .foundonefree:
  518.  
  519.  move.w #0,Noisex
  520.  move.w #0,Noisez
  521.  move.w #50,Noisevol
  522.  move.w tempGunNoise,Samplenum
  523.  move.b #2,chanpick
  524.  clr.b notifplaying
  525.  move.b tempGotBigGun,shotsize(a0)
  526.  move.b tempGunDamage,shotpower(a0)
  527.  movem.l a0/d5/d6/d7,-(a7)
  528.  jsr MakeSomeNoise
  529.  movem.l (a7)+,a0/d5/d6/d7
  530.  
  531.  move.l #ObjectPoints,a1
  532.  move.w (a0),d1
  533.  lea (a1,d1.w*8),a1
  534.  move.w tempxoff,(a1)
  535.  move.w tempzoff,4(a1)
  536.  move.w tempxdir,d0
  537.  ext.l d0
  538.  asl.l #4,d0
  539.  move.l d0,shotxvel(a0)
  540.  move.w tempzdir,d0
  541.  ext.l d0
  542.  asl.l #4,d0
  543.  move.l d0,shotzvel(a0)
  544.  move.w bulyspd,shotyvel(a0)
  545.  move.l #%10000001,EnemyFlags(a0)
  546.  move.l tempRoompt,a2
  547.  move.w (a2),12(a0)
  548.  move.l 2(a2),d0
  549.  sub.l #playerheight,d0
  550.  add.l #22*128,d0
  551.  move.l d0,accypos(a0)
  552.  asr.l #7,d0
  553.  move.w d0,4(a0)
  554.  
  555.  add.w d6,tempangpos
  556.  neg.w d6
  557.  neg.w d5
  558.  add.w d5,d6
  559.  
  560.  dbra d7,firefive
  561.  
  562.  rts
  563.  
  564. duh: dc.w 0
  565. double: dc.w 0
  566. ivescreamed: dc.w 0
  567.  
  568. ObjectHandler:
  569.  
  570.  move.l #ObjectData,a0
  571. Objectloop:
  572.  tst.w (a0)
  573.  blt.s doneallobj
  574.  
  575.  cmp.b #0,16(a0)
  576.  bne.s notnasty
  577.  bsr ItsANasty
  578. notnasty:
  579.  cmp.b #1,16(a0)
  580.  bne.s notmedi
  581.  bsr ItsAMediKit
  582. notmedi:
  583.  cmp.b #2,16(a0)
  584.  bne.s notbullet
  585.  bsr ItsABullet
  586. notbullet:
  587.  cmp.b #3,16(a0)
  588.  bne.s notbiggun
  589.  bsr ItsABigGun
  590. notbiggun:
  591.  cmp.b #4,16(a0)
  592.  bne.s notkey
  593.  bsr ItsAKey
  594. notkey:
  595.  cmp.b #8,16(a0)
  596.  bne.s notmarine
  597.  bsr ItsAMarine
  598. notmarine:
  599.  cmp.b #6,16(a0)
  600.  bne.s notRobot
  601.  bsr ItsARobot
  602. notRobot:
  603.  cmp.b #7,16(a0)
  604.  bne.s notBigNasty
  605.  bsr ItsABigNasty
  606. notBigNasty:
  607.  
  608.  adda.w #64,a0
  609.  bra Objectloop
  610.  
  611. doneallobj:
  612.  rts
  613.  
  614.  include "ab3:source/AI.s"
  615.  
  616. ItsAMarine:
  617.  
  618.  move.w #15,Aggression
  619.  move.w #0,Movement
  620.  move.w #30,Cooperation
  621.  move.b #0,Ident
  622.  move.l #%1,enemies
  623.  move.l #%10100000,friends
  624.  st Armed
  625.  bsr AIControl
  626.  
  627.  move.l objroom,a2
  628.  move.w 10(a2),2(a0)
  629.  move.l 2(a2),d0
  630.  sub.l #6400,d0
  631.  asr.l #7,d0
  632.  move.w d0,4(a0)
  633.  
  634.  move.w #20*256,8(a0)
  635.  
  636.  rts
  637.  
  638. ItsARobot:
  639. ; Head towards a control point, and
  640. ; once there, pick another one at
  641. ; random and go all the way there
  642. ; instead.
  643.  
  644.  tst.w 12(a0)
  645.  blt .thisonedead
  646.  
  647.  tst.b clump
  648.  beq.s .nosound
  649.  
  650.  movem.l d0-d7/a0-a6,-(a7)
  651.  
  652.  move.w (a0),d0
  653.  move.l #ObjRotated,a1
  654.  move.l (a1,d0.w*8),Noisex
  655.  move.w #400,Noisevol
  656.  move.w #7,Samplenum
  657.  move.b #1,chanpick
  658.  clr.b notifplaying
  659.  jsr MakeSomeNoise
  660.  movem.l (a7)+,d0-d7/a0-a6
  661.  
  662. .nosound:
  663.  
  664.  
  665.  move.w 12(a0),d2
  666.  move.l #ZoneAdds,a5
  667.  move.l (a5,d2.w*4),objroom
  668.  
  669.  move.w CurrCPt(a0),d0
  670.  move.w TargCPt(a0),d1
  671.  
  672.  jsr GetNextCPt
  673.  
  674. ; d0 contains nearest CPt to go for.
  675.  
  676.  move.l #CPtPos,a5
  677.  move.w (a5,d0.w*4),newx
  678.  move.w 2(a5,d0.w*4),newz
  679.  
  680.  move.w (a0),d1
  681.  move.l #ObjectPoints,a1
  682.  lea (a1,d1.w*8),a1
  683.  move.w (a1),oldx
  684.  move.w 4(a1),oldz
  685.  
  686.  move.w maxspd(a0),d2
  687.  muls TempFrames,d2
  688.  move.w d2,speed
  689.  move.w #20,Range
  690.  
  691.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  692.  clr.b canshove
  693.  jsr HeadTowardsAng
  694.  
  695.  move.w #%1000000000,wallflags
  696.  Jsr MoveObject
  697.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  698.  
  699.  and.w #8191,Facing(a0)
  700.  
  701.  move.w CosRet,d1
  702.  move.w SinRet,d2
  703.  move.w Facing(a0),d3
  704.  move.l #SineTable,a2
  705.  move.w 120(a2),d6
  706.  swap d6
  707.  clr.w d6
  708.  asr.l #1,d6
  709.  lea (a2,d3.w),a2
  710.  move.w (a2),d4    ; sin
  711.  move.w 2048(a2),d5 ; cos
  712.  muls d2,d5
  713.  muls d1,d4
  714.  
  715.  moveq #0,d3
  716.  
  717.  sub.l d5,d4
  718.  blt.s .turnrighty
  719. .turnlefty:
  720.  
  721.  cmp.l d4,d6
  722.  bgt.s .doneturn
  723.  
  724.  move.w #-120,d3
  725.  
  726.  bra.s .doneturn
  727. .turnrighty:
  728.  
  729.  neg.l d4
  730.  cmp.l d4,d6
  731.  bgt.s .doneturn
  732.  
  733.  move.w #120,d3
  734.  
  735. .doneturn:
  736.  
  737.  move.w #4,maxspd(a0)
  738.  
  739.  muls 2048(a2),d1
  740.  muls (a2),d2
  741.  add.l d2,d1
  742.  cmp.l #$20000000,d1
  743.  bgt.s .canwalk
  744.  move.w #0,maxspd(a0)
  745.  
  746.  add.w d3,d3
  747.  bne.s .canwalk
  748.  move.w #240,d3
  749.  
  750. .canwalk:
  751.  
  752.  add.w Facing(a0),d3
  753.  
  754.  and.w #8191,d3
  755.  
  756.  move.w d3,Facing(a0)
  757.  
  758.  move.l objroom,a2
  759.  move.w (a2),12(a0)
  760.  
  761.  move.w newx,(a1)
  762.  move.w newz,4(a1)
  763.  
  764.  tst.b GotThere
  765.  beq.s .notatnextptyet
  766.  
  767.  move.w d0,CurrCPt(a0)
  768.  cmp.w TargCPt(a0),d0
  769.  bne.s .notatnextptyet
  770.  
  771.  move.w nextCPt,d0
  772.  move.w d0,TargCPt(a0)
  773.  add.w #7,d0
  774.  cmp.w NumCPts,d0
  775.  blt.s .stillsomemore
  776.  sub.w NumCPts,d0
  777. .stillsomemore:
  778.  move.w d0,nextCPt
  779.  
  780. .notatnextptyet:
  781.  
  782.  move.w 10(a2),2(a0)
  783.  move.l 2(a2),d0
  784.  add.l #128*24,d0
  785.  asr.l #7,d0
  786.  move.w d0,targheight(a0)
  787.  
  788.  move.w 4(a0),d1
  789.  
  790.  cmp.w d0,d1
  791.  beq.s .okh
  792.  ble.s .godown
  793.  subq #8,d1
  794. .godown
  795.  addq #4,d1
  796.  move.w d1,4(a0)
  797. .okh:
  798.   
  799. .thisonedead:
  800.  rts
  801.  
  802.  include "ab3:source/aliencontrol.demo"
  803.  
  804. nextCPt: dc.w 0
  805.  
  806. RipTear: dc.l 256*17*65536
  807. otherrip: dc.l 256*18*65536
  808.  
  809. ItsAMediKit:
  810.  
  811. HealFactor EQU 18
  812.  
  813.  move.w PLR1_xoff,oldx
  814.  move.w PLR1_zoff,oldz
  815.  move.w PLR1_Zone,d7
  816.  cmp.w 12(a0),d7
  817.  bne.s .NotSameZone
  818.  move.w (a0),d0
  819.  move.l #ObjectPoints,a1
  820.  move.w (a1,d0.w*8),newx
  821.  move.w 4(a1,d0.w*8),newz
  822.  move.l #50*50,d2
  823.  bsr CheckHit
  824.  tst.b hitwall
  825.  beq.s .NotPickedUp
  826.  
  827.  move.w #0,Noisex
  828.  move.w #0,Noisez
  829.  move.w #50,Noisevol
  830.  move.w #4,Samplenum
  831.  move.b #2,chanpick
  832.  clr.b notifplaying
  833.  movem.l a0/a1/d2/d6/d7,-(a7)
  834.  jsr MakeSomeNoise
  835.  movem.l (a7)+,a0/a1/d2/d6/d7
  836.  
  837.  move.w #-1,12(a0)
  838.  move.w HealFactor(a0),d0
  839.  add.w d0,Energy
  840.  
  841. .NotPickedUp:
  842.  
  843. .NotSameZone:
  844.  
  845.  rts
  846.  
  847.  
  848. ItsABigGun:
  849.  
  850.  move.w PLR1_xoff,oldx
  851.  move.w PLR1_zoff,oldz
  852.  move.w PLR1_Zone,d7
  853.  cmp.w 12(a0),d7
  854.  bne .NotSameZone
  855.  move.w (a0),d0
  856.  move.l #ObjectPoints,a1
  857.  move.w (a1,d0.w*8),newx
  858.  move.w 4(a1,d0.w*8),newz
  859.  move.l #50*50,d2
  860.  bsr CheckHit
  861.  tst.b hitwall
  862.  beq.s .NotPickedUp
  863.  
  864.  move.w #0,Noisex
  865.  move.w #0,Noisez
  866.  move.w #50,Noisevol
  867.  move.w #4,Samplenum
  868.  move.b #2,chanpick
  869.  clr.b notifplaying
  870.  movem.l a0/a1/d2/d6/d7,-(a7)
  871.  jsr MakeSomeNoise
  872.  movem.l (a7)+,a0/a1/d2/d6/d7
  873.  
  874.  move.l #Cheese,FacesPtr
  875.  move.w #4,Cheese
  876.  move.w #-1,FacesCounter
  877.  move.b #5,PLR1_GunDamage
  878.  st PLR1_GotBigGun
  879.  move.w #1,PLR1_GunNoise
  880.  
  881.  move.w #-1,12(a0)
  882.  
  883. .NotPickedUp:
  884.  
  885. .NotSameZone:
  886.  
  887.  rts
  888.  
  889. ItsAKey:
  890.  
  891.  move.w PLR1_xoff,oldx
  892.  move.w PLR1_zoff,oldz
  893.  move.w PLR1_Zone,d7
  894.  cmp.w 12(a0),d7
  895.  bne .NotSameZone
  896.  move.w (a0),d0
  897.  move.l #ObjectPoints,a1
  898.  move.w (a1,d0.w*8),newx
  899.  move.w 4(a1,d0.w*8),newz
  900.  move.l #50*50,d2
  901.  bsr CheckHit
  902.  tst.b hitwall
  903.  beq .NotPickedUp
  904.  
  905.  move.w #0,Noisex
  906.  move.w #0,Noisez
  907.  move.w #50,Noisevol
  908.  move.w #4,Samplenum
  909.  move.b #2,chanpick
  910.  clr.b notifplaying
  911.  movem.l a0/a1/d2/d6/d7,-(a7)
  912.  jsr MakeSomeNoise
  913.  movem.l (a7)+,a0/a1/d2/d6/d7
  914.  
  915.  move.w #-1,12(a0)
  916.  move.b 17(a0),d0
  917.  or.b d0,Conditions
  918.  
  919.  move.l #Panel+24*64,a1
  920.  move.l #Panel+24*16+14,a2
  921.  
  922.  moveq #0,d1
  923.  lsr.b #1,d0
  924.  bcs.s .done
  925.  addq #2,d1
  926.  lsr.b #1,d0
  927.  bcs.s .done
  928.  addq #2,d1
  929.  lsr.b #1,d0
  930.  bcs.s .done
  931.  addq #2,d1 
  932. .done
  933.  
  934.  adda.w d1,a1
  935.  adda.w d1,a2
  936.  
  937.  move.w #4,d0
  938. .planes:
  939.  move.l a1,a3
  940.  move.l a2,a4
  941.  moveq #15,d1
  942. .lines
  943.  move.w (a3),(a4)
  944.  adda.w #24,a3
  945.  adda.w #24,a4
  946.  dbra d1,.lines
  947.  add.l #80*24,a1
  948.  add.l #80*24,a2
  949.  dbra d0,.planes
  950.  
  951.  
  952. .NotPickedUp:
  953.  
  954. .NotSameZone:
  955.  
  956.  rts
  957.  
  958. Conditions: dc.w 0
  959.  
  960. ItsABullet:
  961.  
  962.  tst.b shotsize(a0)
  963.  beq.s ItsASmallBullet
  964.  bra ItsABigBullet
  965.  
  966. ItsASmallBullet
  967.  
  968.  move.w 12(a0),d0
  969.  blt doneshot
  970.  
  971.  move.l #(256*11*65536)+32,8(a0)
  972.  move.w #25*256+25,6(a0)
  973. doneshot:
  974.  rts
  975.  
  976. ItsABigBullet:
  977.  
  978.  move.w 12(a0),d0
  979.  blt doneshot
  980.  
  981.  tst.b shotstatus(a0)
  982.  beq.s notpopping
  983.  
  984.  move.l #256*7*65536,a1
  985.  move.b #12,d0
  986.  sub.b shotstatus(a0),d0
  987.  btst #0,d0
  988.  beq.s nobot
  989.  adda.w #32,a1
  990. nobot:
  991.  asr.b #1,d0
  992.  ext.w d0
  993.  asl.w #7,d0
  994.  move.l a1,8(a0)
  995.  add.w d0,8(a0)
  996.  add.w #4*256+4,6(a0)
  997.  sub.w #4,4(a0)
  998.  
  999.  sub.b #1,shotstatus(a0)
  1000.  bgt.s notdonepop
  1001.  move.w #-1,12(a0)
  1002.  clr.b shotstatus(a0)
  1003. notdonepop:
  1004.  
  1005.  bra doneshot
  1006.  
  1007. notpopping:
  1008.  
  1009.  move.w #25*256+25,6(a0)
  1010.  
  1011.  rts
  1012.  
  1013. hithit: dc.l 0
  1014.  
  1015.  
  1016. putinbackdrop:
  1017.  
  1018.  move.l a0,-(a7)
  1019.  
  1020.  move.w angpos,d5
  1021.  and.w #8191,d5
  1022.  muls #432,d5
  1023.  divs #8192,d5
  1024.  muls #38*2,d5
  1025.  
  1026.  CACHE_ON d1
  1027.  
  1028.  move.l frompt,a0
  1029.  adda.w #104*4,a0
  1030.  move.l #EndBackPicture,a3
  1031.  lea.l BackPicture,a1
  1032.  add.l d5,a1
  1033.  move.w #2,d4
  1034.  bra allbars
  1035.  cnop 0,32
  1036. allbars:
  1037.  move.w #31,d3
  1038. onebar:
  1039. vertline:    
  1040. val SET 0
  1041.  
  1042.  REPT 19
  1043.  move.l (a1)+,d0
  1044.  move.w d0,val+104*4(a0)
  1045.  swap d0
  1046.  move.w d0,val(a0)
  1047. val SET val+104*8
  1048.  ENDR
  1049.  
  1050.  cmp.l a3,a1
  1051.  blt.s notoffrightend
  1052.  move.l #BackPicture,a1
  1053. notoffrightend:
  1054.  
  1055.  addq #4,a0
  1056.  dbra d3,onebar
  1057.  addq #4,a0
  1058.  dbra d4,allbars
  1059.  
  1060.  move.l (a7)+,a0
  1061.  rts
  1062.